﻿using System;
using System.Data;
using System.Data.SqlClient;
using Onshi.POS.AccesoDatos.Interfaces;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosArticulo : ServicioDatosBase, IServicioDatosArticulo
    {
        #region Constructores

        public ServicioDatosArticulo()
            : base()
        {
        }

        #endregion

        #region Metodos

        public void Articulos_Habilitar(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("Articulos_Habilitar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Articulos_DevolverTodos()
        {
            try
            {
                SqlCommand cm = new SqlCommand("Articulos_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Articulos_DevolverPorIdConDetalle(Int32 idArticulo)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Articulos_DevolverPorIdConDetalle", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Articulos_DevolverPorId(int idArticulo)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Articulos_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public int Articulos_Insertar(Int32 idTipoArticulo, Int32 idRubroArticulo, Int32 idDescuetoRecargo, Int32 idMarca, Int32 idTipoComisionArticulo, Int32 idTipoImpuestoArticulo, Int32 idTipoCostoArticulo, Int32 idPromocion, String codigo, String nombre, Int32 existenciaMinimo, Int32 existenciaMaximo, String descripcionServicio, Decimal costo, Decimal comision, Decimal comisionMaxima, Decimal iva, Decimal impuesto, Boolean estaEliminado)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Articulos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdTipoArticulo", idTipoArticulo));
                cm.Parameters.Add(new SqlParameter("@IdRubroArticulo", idRubroArticulo));
                cm.Parameters.Add(new SqlParameter("@IdDescuentoRecargo", idDescuetoRecargo));
                cm.Parameters.Add(new SqlParameter("@IdMarca", idMarca));
                cm.Parameters.Add(new SqlParameter("@IdTipoComisionArticulo",idTipoComisionArticulo));
                cm.Parameters.Add(new SqlParameter("@IdTipoImpuestoArticulo", idTipoImpuestoArticulo));
                cm.Parameters.Add(new SqlParameter("@IdTipoCostoArticulo", idTipoCostoArticulo));
                cm.Parameters.Add(new SqlParameter("@IdPromocion", idPromocion));
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                cm.Parameters.Add(new SqlParameter("@Nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@ExistenciaMinimo", existenciaMinimo));
                cm.Parameters.Add(new SqlParameter("@ExistenciaMaximo", existenciaMaximo));
                cm.Parameters.Add(new SqlParameter("@DescripcionServicio", descripcionServicio));
                cm.Parameters.Add(new SqlParameter("@Costo", costo));
                cm.Parameters.Add(new SqlParameter("@Comision", comision));
                cm.Parameters.Add(new SqlParameter("@ComisionMaxima", comisionMaxima));
                cm.Parameters.Add(new SqlParameter("@Iva", iva));
                cm.Parameters.Add(new SqlParameter("@Impuesto", impuesto));
                cm.Parameters.Add(new SqlParameter("@EstaEliminado", estaEliminado));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_Modificar(Int32 idArticulo, Int32 idTipoArticulo, Int32 idRubroArticulo, Int32 idDescuetoRecargo, Int32 idMarca, Int32 idTipoComisionArticulo, Int32 idTipoImpuestoArticulo, Int32 idTipoCostoArticulo, Int32 idPromocion, String codigo, String nombre, Int32 existenciaMinimo, Int32 existenciaMaximo, String descripcionServicio, Decimal costo, Decimal comision, Decimal comisionMaxima, Decimal iva, Decimal impuesto, Boolean estaEliminado)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Articulos_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                cm.Parameters.Add(new SqlParameter("@IdTipoArticulo", idTipoArticulo));
                cm.Parameters.Add(new SqlParameter("@IdRubroArticulo", idRubroArticulo));
                cm.Parameters.Add(new SqlParameter("@IdDescuentoRecargo", idDescuetoRecargo));
                cm.Parameters.Add(new SqlParameter("@IdMarca", idMarca));
                cm.Parameters.Add(new SqlParameter("@IdTipoComisionArticulo", idTipoComisionArticulo));
                cm.Parameters.Add(new SqlParameter("@IdTipoImpuestoArticulo", idTipoImpuestoArticulo));
                cm.Parameters.Add(new SqlParameter("@IdTipoCostoArticulo", idTipoCostoArticulo));
                cm.Parameters.Add(new SqlParameter("@IdPromocion", idPromocion));
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                cm.Parameters.Add(new SqlParameter("@Nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@ExistenciaMinimo", existenciaMinimo));
                cm.Parameters.Add(new SqlParameter("@ExistenciaMaximo", existenciaMaximo));
                cm.Parameters.Add(new SqlParameter("@DescripcionServicio", descripcionServicio));
                cm.Parameters.Add(new SqlParameter("@Costo", costo));
                cm.Parameters.Add(new SqlParameter("@Comision", comision));
                cm.Parameters.Add(new SqlParameter("@ComisionMaxima", comisionMaxima));
                cm.Parameters.Add(new SqlParameter("@Iva", iva));
                cm.Parameters.Add(new SqlParameter("@Impuesto", impuesto));
                cm.Parameters.Add(new SqlParameter("@EstaEliminado", estaEliminado));
                Conexion.Open();
                cm.ExecuteScalar();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_Eliminar(int idArticulo)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Articulos_Eliminar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosDetalles_Insertar(Int32 idArticulo, String observacion, Byte[] imagen)
        {
            try
            {
                SqlCommand cm = new SqlCommand("ArticulosDetalles_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@Imagen", imagen));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosDetalles_Modificar(Int32 idArticulo, String observacion, Byte[] imagen)
        {
            try
            {
                SqlCommand cm = new SqlCommand("ArticulosDetalles_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdArticulo", idArticulo));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@Imagen", imagen));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }
        #endregion
    }
}
